package app.sevenc.lib_framework.mvvm

import android.util.SparseArray
import androidx.annotation.LayoutRes


/**
 * 将 DataBinding 实例限制于 base 页面中，默认不向子类暴露，
 * 通过这样的方式，来彻底解决 视图调用的一致性问题，
 * 如此，视图刷新的安全性将和基于函数式编程的 Jetpack Compose 持平。
 * 而 DataBindingConfig 就是在这样的背景下，用于为 base 页面中的 DataBinding 提供绑定项。
 *
 * @property layoutId Int 布局id
 * @property vmVariableId Int viewModel在BR表中的id
 * @property bindingParams SparseArray<Any>
 * @constructor
 * @author Seven-C
 * @date 2021/8/25
 */
class DataBindingConfig(
    @LayoutRes val layoutId: Int,
    val vmVariableId: Int
) {

    val bindingParams by lazy { SparseArray<Any>() }

    fun addBindingParam(variableId: Int, variableObj: Any): DataBindingConfig {
        if (bindingParams[variableId] == null) {
            bindingParams.put(variableId, variableObj)
        }
        return this
    }
}